package com.lavida.project.system.user.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.lavida.project.system.user.domain.User;

/**
 * 用户表 数据层
 * 
 */
public interface UserMapper
{
    /**
     * 根据条件分页查询用户列表
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<User> selectUserList(User user);

    /**
     * 根据条件分页查询未已配用户角色列表
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<User> selectAllocatedList(User user);

    /**
     * 根据条件分页查询未分配用户角色列表
     * 
     * @param user 用户信息
     * @return 用户信息集合信息
     */
    public List<User> selectUnallocatedList(User user);

    /**
     * 通过用户名查询用户
     * 
     * @param userName 用户名
     * @return 用户对象信息
     */
    public User selectUserByLoginName(String userName);

    /**
     * 通过手机号码查询用户
     * 
     * @param phoneNumber 手机号码
     * @return 用户对象信息
     */
    public User selectUserByPhoneNumber(String phoneNumber);

    /**
     * 通过邮箱查询用户
     * 
     * @param email 邮箱
     * @return 用户对象信息
     */
    public User selectUserByEmail(String email);

    /**
     * 通过用户ID查询用户
     * 
     * @param userId 用户ID
     * @return 用户对象信息
     */
    public User selectUserById(Long userId);

    /**
     * 通过用户ID删除用户
     * 
     * @param userId 用户ID
     * @return 结果
     */
    public int deleteUserById(Long userId);

    /**
     * 批量删除用户信息
     * 
     * @param ids 需要删除的数据ID
     * @return 结果
     */
    public int deleteUserByIds(Long[] ids);

    /**
     * 修改用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int updateUser(User user);

    /**
     * 新增用户信息
     * 
     * @param user 用户信息
     * @return 结果
     */
    public int insertUser(User user);

    /**
     * 校验用户名称是否唯一
     * 
     * @param loginName 登录名称
     * @return 结果
     */
    public int checkLoginNameUnique(String loginName);

    /**
     * 校验手机号码是否唯一
     *
     * @param phonenumber 手机号码
     * @return 结果
     */
    public User checkPhoneUnique(String phonenumber);

    /**
     * 校验email是否唯一
     *
     * @param email 用户邮箱
     * @return 结果
     */
    public User checkEmailUnique(String email);
    /**
     * 查询部门领导
     * @param roleKey
     * @param deptId
     * @return
     */
    @Select("select login_name from sys_user a,sys_user_role b,sys_role c where a.user_id = b.user_id and b.role_id = c.role_id and a.dept_id=#{deptId} and c.role_key= #{roleKey} and a.del_flag = 0 and a.status = 0")
    public String selectDeptLeaderId(@Param(value = "roleKey") String roleKey,@Param(value = "deptId") Long deptId);
    
    /**
     * 根据角色名称查找用户
     * @param roleKey
     * @return
     */
    @Select("select a.login_name from sys_user a,sys_role b,sys_user_role c\r\n" + 
    		"where a.del_flag = 0 and a.status = 0\r\n" + 
    		"and b.del_flag = 0 and b.status = 0\r\n" + 
    		"and b.role_id = c.role_id\r\n" + 
    		"and a.user_id = c.user_id\r\n" + 
    		"and b.role_key = #{roleKey}")
    public String selectUserByUniqueRolekey(String roleKey);
    
    /**
     * 根据姓名、部门查询非管理员的所有用户
     * @param user
     * @return
     */
    public List<User> selectUserList2(Map<String, Object> paraMap);
    public long getUserList2Total(Map<String, Object> paraMap);
    
    /**
     *  查询所有用户
     * @param paraMap
     * @return
     */
    public List<User> getUserListAllParam(Map<String, Object> paraMap);
    public long getUserListTotalAllParam(Map<String, Object> paraMap);
    
    
    @Select("select a.user_name as userName,a.login_name as loginName from sys_user a,sys_dept b where a.dept_id = b.dept_id and b.dept_name=#{deptName} and a.status = 0 and a.del_flag = 0")
    public List<User> selectUserByDeptName(String deptName);

    
    /**
     * 删除用户
     * @param userId
     */
    @Select("delete from sys_user where user_id=#{userId}")
    public void deleteUser(int userId);
    
    /**
     * 	添加用户
     */
    @Insert("insert into sys_user(login_name,user_name,password,create_time,salt,role) values(#{loginName},#{userName},#{password},#{createTime},#{salt},#{role})")
    public int addUser(User user);
    
    /**
     * 	通过登录名来查询用户
     */
    @Select("select * from sys_user where login_name=#{loginName}")
    User selectByLoginName(String loginName);
    
    
    @Select("select user_id from sys_user where login_name=#{loginName}")
    Long selectByLoginNames(String loginName);
    
    public User selectUser(int userIdGolbal);
    
    /**
     *      修改用户角色
     */
    @Update("update sys_user set role=#{role} where user_id=#{userId}")
    public void updateUserRole(String role,Integer userId);
    
    /**
     * 
     * 	超级管理员admin修改用户密码
     */
    @Update("update sys_user set password=#{newPassword} where user_id=#{userIdGolbal}")
    public void updateUserPwd(String newPassword,int userIdGolbal);
    
    /**
     *   个人用户来修改自己的密码
     */
    @Update("update sys_user set password=#{newPassword} where user_id=#{userId}")
    public void resetPwd(String newPassword,int userId);
    
    @Update("update sys_user set user_name=#{userName},phonenumber=#{phonenumber},email=#{email} where user_id=#{userId}")
    public int updateBasicInform(User user);
}
